const mysql = require('mysql2/promise'); // 使用 promise 版本的 mysql2
const dotenv = require('dotenv');

dotenv.config(); // 加载 .env 文件中的环境变量

// 单一数据库连接池配置 (从 .env 文件读取)
const dbConfig = {
  host: process.env.DB_HOST || 'localhost',
  user: process.env.DB_USER || 'root',
  password: process.env.DB_PASSWORD || '',
  database: process.env.DB_NAME, // 使用 .env 中的 DB_NAME 作为默认数据库
  waitForConnections: true,
  connectionLimit: 10, // 连接池的最大连接数
  queueLimit: 0,
  charset: 'utf8mb4' // 推荐使用 utf8mb4 以支持更广字符集
};

// 创建单一连接池
const pool = mysql.createPool(dbConfig);

// 测试数据库连接的函数
async function testConnection() {
  let connection;
  try {
    // 确保 DB_NAME 在 .env 中已设置
    if (!dbConfig.database) {
      console.error('DB_NAME is not defined in your .env file. Please set it to your default database name.');
      return false;
    }
    connection = await pool.getConnection();
    await connection.ping(); // 简单地 ping 一下数据库
    console.log(`Successfully connected to MySQL server. Default database: '${dbConfig.database}'.`);
    return true;
  } catch (error) {
    console.error(`Error connecting to MySQL database '${dbConfig.database}':`);
    if (error.code === 'ER_BAD_DB_ERROR') {
      console.error(`Database '${dbConfig.database}' might not exist. Please create it or check the DB_NAME in your .env file.`);
    } else if (error.code === 'ECONNREFUSED') {
      console.error(`Connection refused. Ensure MySQL server is running and accessible at ${dbConfig.host}:${process.env.DB_PORT || 3306}.`);
    } else if (error.code === 'ER_ACCESS_DENIED_ERROR') {
      console.error(`Access denied for user '${dbConfig.user}'. Check your DB_USER and DB_PASSWORD in .env.`);
    } else {
      console.error(error.message);
    }
    return false;
  } finally {
    if (connection) connection.release(); // 释放连接回连接池
  }
}

module.exports = {
  pool, // 导出单一连接池
  testConnection // 导出测试连接的函数
};